﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace AlgorithmTest
{
    // T_[四个数字排序]_[算法名]
    public class T_0199_ReorderSpaces : IAlgorithm
    {
        // 1592. 重新排列单词间的空格

        /*
            给你一个字符串 text ，该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成，
            并且两个单词之间至少存在一个空格。题目测试用例保证 text 至少包含一个单词 。
            请你重新排列空格，使每对相邻单词之间的空格数目都 相等 ，并尽可能 最大化 该数目。
            如果不能重新平均分配所有空格，请 将多余的空格放置在字符串末尾 ，这也意味着返回的字符串应当与原 text 字符串的长度相等。
            返回 重新排列空格后的字符串 。

            提示：
                1 <= text.length <= 100
                text 由小写英文字母和 ' ' 组成
                text 中至少包含一个单词
        */

        public void Test()
        {
            // 算法参数定义

            // 算法执行与打印
            //Console.WriteLine(Algorithm());
            //var res = Algorithm(param);
            //foreach (var item in res)
            //{
            //    foreach (var iitem in item)
            //    {
            //        Console.Write(iitem + " ");
            //    }
            //    Console.WriteLine();
            //}
        }

        // 算法
        public string ReorderSpaces(string text)
        {
            var res = string.Empty;
            int spaceCnt = text.ToArray().Count(x => char.IsWhiteSpace(x)); 
            if (spaceCnt == 0) return text;
            var words = text.Split(' ').Where(x=>x.Length>0);
            if (words.Count() < 1) {
                foreach (var word in words)
                    res += word;
                for (int i = 0; i < spaceCnt; i++)
                    res += " ";
                return res;
            }

            var avgSpaceCnt = spaceCnt / (words.Count() - 1);
            var modSpaceCnt = spaceCnt % (words.Count() - 1);

            foreach (var word in words)
            {
                if (!string.IsNullOrEmpty(res))
                    for (int i = 0; i < avgSpaceCnt; i++)
                        res += " ";
                res+=word;
            }
            for (int i = 0; i < modSpaceCnt; i++)
                res += " ";
            return res;
        }

    }
}
